//
//  LabelViewController.swift
//  DemoProject
//
//  Created by hao on 2018/7/18.
//  Copyright © 2018年 hao. All rights reserved.
//

import UIKit

/// 包括 RxCocoa 属性、系统常用属性的使用
class LabelViewController: BaseTableViewController {

    let disposeBag = DisposeBag()
    
    lazy var label: UILabel = {
        let _label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 44))
        self.tableHeadView.addSubview(_label)
        _label.text = "WELCOME HAO CHEN"
        _label.center = CGPoint(x: self.tableHeadView.width*0.5, y: self.tableHeadView.height*0.5)
        return _label
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setupData()
        _labelProperty()
        _rxLabelProperty()
    }
    
    private func _rxLabelProperty() {
        //创建一个计时器（每0.1秒发送一个索引数）
        let timer = Observable<Int>.interval(0.1, scheduler: MainScheduler.instance)
        
        //将已过去的时间格式化成想要的字符串，并绑定到label上
        // String(format: "%0.2d:%0.2d.%0.1d", arguments: [($0 / 600) % 600, ($0 % 600 ) / 10, $0 % 10])
        timer.map { [weak self] in self!._formatTimeInterval(ms: $0) }
            .bind(to: label.rx.attributedText)
            .disposed(by: disposeBag)
    }
    
    //将数字转成对应的富文本
    private func _formatTimeInterval(ms: NSInteger) -> NSMutableAttributedString {
        let string = String(format: "%0.2d:%0.2d.%0.1d",
                            arguments: [(ms / 600) % 600, (ms % 600 ) / 10, ms % 10])
        //富文本设置
        let attributeString = NSMutableAttributedString(string: string)
        //从文本0开始6个字符字体HelveticaNeue-Bold,16号
        attributeString.addAttribute(NSAttributedStringKey.font,
                                     value: UIFont(name: "HelveticaNeue-Bold", size: 16)!,
                                     range: NSMakeRange(0, 5))
        //设置字体颜色 NSAttributedStringKey.foregroundColor
        attributeString.addAttribute(NSAttributedStringKey.foregroundColor,
                                     value: UIColor.white, range: NSMakeRange(0, 5))
        //设置文字背景颜色 NSAttributedStringKey.backgroundColor
        attributeString.addAttribute(NSAttributedStringKey.backgroundColor,
                                     value: UIColor.orange, range: NSMakeRange(0, 5))
        return attributeString
    }

    private func _labelProperty() {
        // 对齐方式
        label.textAlignment = .center
        // 阴影颜色
        label.shadowColor = UIColor.gray
        // 阴影偏移
        label.shadowOffset = CGSize(width: 2, height: 2)
        // 字体
        label.font = UIFont(name:"Zapfino", size:20)
        
        label.lineBreakMode = .byTruncatingTail  //隐藏尾部并显示省略号
        label.lineBreakMode = .byTruncatingMiddle  //隐藏中间部分并显示省略号
        label.lineBreakMode = .byTruncatingHead  //隐藏头部并显示省略号
        label.lineBreakMode = .byClipping  //截去多余部分也不显示省略号
        
        // 当文字超出标签宽度时，自动调整文字大小，使其不被截断
        label.adjustsFontSizeToFitWidth = true
        
        //设置文本高亮
        label.isHighlighted = true
        //设置文本高亮颜色
//        label.highlightedTextColor = UIColor.green
    }
    
    private func setupData() {
        let titles = ["text",
                      "attributedText",
                      "font",
                      "textAlignment",
                      "lineBreakMode",
                      "enabled",
                      "adjustsFontSizeToFitWidth",
                      "adjustsLetterSpacingToFitWidth",
                      "numberOfLines",
                      "minimumScaleFactor",
                      "highlightedTextColor",
                      "shadowColor",
                      "shadowOffset",
                      "preferredMaxLayoutWidth",
                      "baselineAdjustment"]
        let descArr = ["设置标签显示文本",
                       """
                        设置标签属性文本
                        NSString *text = @"first";
                        NSMutableAttributedString *textLabelStr = [[NSMutableAttributedString alloc] initWithString:text];
                        [textLabelStr setAttributes:@{NSForegroundColorAttributeName : [UIColor lightGrayColor],
                        NSFontAttributeName : [UIFont systemFontOfSize:17]} range:NSMakeRange(11, 10)];
                        label.attributedText = textLabelStr
                       """,
                       "label.font = [UIFont systemFontOfSize:17];\nlabel.font = [UIFont fontWithName:@\"Arial\" size:16];",
                       """
                        设置标签文本对齐方式
                        case left // Visually left aligned
                        case center // Visually centered
                        case right // Visually right aligned
                        // Visually right aligned
                        // Visually centered
                        case justified // Fully-justified. The last line in a paragraph is natural-aligned.
                        case natural // Indicates the default alignment for script
                       """,
                       """
                        设置标签文字过长时的显示方式,这个属性使用于label中文本的换行和截短。numberofLines必须设置为0才有效果
                        NSLineBreakByCharWrapping;以字符为显示单位显示，后面部分省略不显示
                        NSLineBreakByClipping;剪切与文本宽度相同的内容长度，后半部分被删除
                        NSLineBreakByTruncatingHead;前面部分文字以……方式省略，显示尾部文字内容
                        NSLineBreakByTruncatingMiddle;中间的内容以……方式省略，显示头尾的文字内容
                        NSLineBreakByTruncatingTail;结尾部分的内容以……方式省略，显示头的文字内容
                        NSLineBreakByWordWrapping;以单词为显示单位显示，后面部分省略不显示
                       """,
                       "设置文字内容是否可变",
                       "文字内容自适应标签宽度",
                       "根据字母的间隔自适应标签宽度，超出部分以……显示",
                       "标签最多显示行数",
                       "设置最小字体",
                       "设置文本高亮显示颜色，与highlighted一起使用",
                       "设置文本阴影颜色",
                       "设置文本阴影与原文本的偏移量",
                       "优先选择标签布局的最大宽度",
                       """
                        如果adjustsFontSizeToFitWidth属性设置为YES，这个属性就来控制文本基线的行为
                        label4.baselineAdjustment = UIBaselineAdjustmentNone;
                        UIBaselineAdjustmentAlignBaselines = 0, 默认文本最上端与中线对齐
                        UIBaselineAdjustmentAlignCenters,   文本中线与label中线对齐
                        UIBaselineAdjustmentNone,  文本最低端与label中线对齐
                       """,]
        addTitles(titles, footDescs: descArr)
    }
    
}

extension LabelViewController {
    
//    override func tableView(_ tableView: UITableView, willDisplayFooterView view: UIView, forSection section: Int) {
//        view.tintColor = UIColor.clear
//        if let footView = view as? UITableViewHeaderFooterView {
//            footView.contentView.backgroundColor = UIColor.clear
//            footView.textLabel?.numberOfLines = 0
//            footView.textLabel?.textColor = UIColor.gray
//        }
//    }
    
//    override func customStyle(with cell: UITableViewCell!, indexPath: IndexPath!) {
//        cell.backgroundColor = UIColor.white
//    }
    
}
